package com.ruoyi.common.utils.http;

import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.config.ApiConfig;
import com.ruoyi.common.utils.bean.CottonApiModel;
import com.ruoyi.common.utils.sign.Md5Utils;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.stream.Collectors;

import static cn.hutool.core.lang.RegexPool.URL;

/**
 * @author 吴璇璇
 * @title: SendUtils
 * @projectName ruoyi
 * @description: TODO
 * @date 2025/7/18 16:07
 */

@Component
public class SendUtils {

    @Autowired
    private ApiConfig apiConfig;


    @NotNull
    public String sendPost(String URL, JSONObject object) {
        String timedStamp = Md5Utils.timeStamp();
        String sign = Md5Utils.hash(apiConfig.getServiceName() + apiConfig.getKey() + timedStamp);
        CottonApiModel cottonApiModel = new CottonApiModel(apiConfig.getServiceName(), timedStamp, sign, com.alibaba.fastjson2.JSONObject.toJSONString(object));
        String jsonString = JSONObject.toJSONString(cottonApiModel);
        System.out.println(jsonString);
        String s = null;
        try {
            s = HttpClientUtils.sendPostRequest(URL, JSONObject.toJSONString(cottonApiModel));
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        return s;
    }

    /**
     * 发送POST请求，参数通过URL参数传递
     * @param url 请求URL
     * @param params URL参数
     * @return 响应结果
     */
    public String sendPost(String url, Map<String, String> params) {
        // 构建带参数的完整URL
        StringBuilder fullUrl = new StringBuilder(url);
        if (params != null && !params.isEmpty()) {
            // 检查URL是否已经包含查询参数
            boolean firstParam = !url.contains("?");

            for (Map.Entry<String, String> entry : params.entrySet()) {
                fullUrl.append(firstParam ? "?" : "&");
                firstParam = false;

                try {
                    fullUrl.append(URLEncoder.encode(entry.getKey(), "UTF-8"))
                            .append("=")
                            .append(URLEncoder.encode(entry.getValue(), "UTF-8"));
                } catch (UnsupportedEncodingException e) {
                    throw new RuntimeException("URL encoding failed", e);
                }
            }
        }
        System.out.println(fullUrl);
        url = fullUrl.toString();

//        String result = null;
//        try {
//            // 发送POST请求，参数在URL中
//            result = HttpClientUtils.doPostJson(fullUrl.toString(), new HashMap<>());
//            System.out.println("POST URL: " + fullUrl.toString());
//            System.out.println("Response: " + result);
//        } catch (Exception e) {
//            e.printStackTrace();
//            throw new RuntimeException(e);
//        }
//        return result;
        String s = null;
        try {
            s = HttpClientUtils.doPostJson(url);
            System.out.println(s);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
        return s;
    }


    /**
     * 处理detail，每两个保留一个逗号。 经纬度用空格隔开
     * @param s
     * @return
     */
    public static String joinSpecialSimple(String s) {
        String[] parts = s.split(",");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < parts.length; i++) {
            if (i > 0) { // 如果不是第一个元素，则在前面加上空格或逗号（取决于是否为最后一个元素的两部分组合）
                if (i % 2 == 0 && i < parts.length - 1) { // 每两个一组用逗号拼接的情况处理，但不是最后一个元素的两部分组合时添加逗号
                    sb.append(",");
                } else { // 其他情况直接拼接，最后一个元素不加逗号（除非你有特定需求）
                    sb.append(" ");
                }
            }
            sb.append(parts[i]); // 添加当前元素
        }
        return sb.toString(); // 返回结果字符串，可根据需要决定是否移除末尾的逗号或空格等。
    }


    /**
     * 交换经纬度的位置
     * @param input
     * @return
     */
    public static String swapPairs(String input) {
        String[] groups = input.split(",");
        StringBuilder result = new StringBuilder();

        for (int i = 0; i < groups.length; i++) {
            String group = groups[i].trim();
            String[] values = group.split(" ");

            if (values.length == 2) {
                // 交换两个值的位置
                String temp = values[0];
                values[0] = values[1];
                values[1] = temp;

                if (i > 0) {
                    result.append(", ");
                }
                result.append(values[0]).append(" ").append(values[1]);
            }
        }

        return result.toString();
    }






    /**
     * 拼接经纬度形成闭环，才能用postgis函数判断
     * @param str
     * @return
     */

    public static String areFirstAndLastTwoEqual(String str) {
        // 分割字符串
        String[] parts = str.split(",");
        // 检查数组长度是否至少为4（至少需要两个元素在前部和后部）
        if (parts.length < 4) {
            return str; // 如果元素不足四个，直接返回false
        }
        // 检查前两个元素和后两个元素是否相等
        String aa=parts[0];
        String bb=parts[1];
        String cc=parts[parts.length - 2];
        String dd=parts[parts.length - 1];
        boolean compare= parts[0].equals(parts[parts.length - 2]) && parts[1].equals(parts[parts.length - 1]);
        if(compare==false){
            str=str+","+aa+","+bb;
        }
        return str;
    }






}
